/**
 * 给定ABCK四个数，每次在ABC中选两个数，记作x和y，
 * 然后把ABC变为x、y、mex(x, y)
 * 问最少操作多少次，可以把ABC其一变为K，无解输出-1
 * 分情况讨论：
 * 1. 如果本来就有K，答案是零
 * 2. 如果K大于2，答案是-1，因为mex能够引入的数只有012，所以超过2原来又没有的话肯定无解
 * 3. 根据K是012分别讨论
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using pii = pair<int, int>;

int A, B, C, K;

void work(){
    cin >> A >> B >> C >> K;
    if(A == K or B == K or C == K) return (void)(cout << "0\n");
    if(K > 2) return (void)(cout << "-1\n");
    if(0 == K) return (void)(cout << "1\n");
    
    vi vec{A, B, C, K};
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());

    if(1 == K){
        if(0 == vec[0]) return (void)(cout << "1\n");
        return (void)(cout << "2\n");
    }

    if(0 == vec[0]){
        if(1 == vec[1]){
            return (void)(cout << "1\n");
        }
        return (void)(cout << "2\n");
    }

    if(1 == vec[0]){
        return (void)(cout << "2\n");
    }
    return (void)(cout << "3\n");
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--) work();
    return 0;
}
